package com.english.controller;

import com.english.entity.FreeLessonTimeSlot;
import com.english.service.FreeLessonTimeSlotService;
import com.english.utils.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDate;
import java.util.List;

@RestController
@RequestMapping("/api/time-slot")
public class FreeLessonTimeSlotController {

    @Autowired
    private FreeLessonTimeSlotService timeSlotService;

    // 发布时段（管理员）
    @PostMapping
    public R<Void> createTimeSlot(@RequestBody FreeLessonTimeSlot slot) {
        timeSlotService.createTimeSlot(slot);
        return R.success();
    }

    // 获取可预约时段  已测
    @GetMapping
    public R<List<FreeLessonTimeSlot>> getAvailableSlots(@RequestParam("date") String date) {
        List<FreeLessonTimeSlot> slots = timeSlotService.getAvailableSlots(LocalDate.parse(date));
        return R.success(slots);
    }

    @DeleteMapping("/{id}")
    public R<Void> deleteTimeSlot(@PathVariable Long id) {
        timeSlotService.deleteTimeSlot(id);
        return R.success();
    }
    
    /**
     * 获取时段详情（管理员用）
     * @param id 时段ID
     * @return 时段详情
     */
    @GetMapping("/{id}")
    public R<FreeLessonTimeSlot> getTimeSlotById(@PathVariable Long id) {
        FreeLessonTimeSlot timeSlot = timeSlotService.getTimeSlotById(id);
        if (timeSlot == null) {
            return R.error("时段不存在");
        }
        return R.success("获取成功", timeSlot);
    }
    
    /**
     * 编辑时段（管理员用）
     * @param id 时段ID
     * @param timeSlot 时段信息
     * @return 操作结果
     */
    @PutMapping("/{id}")
    public R<String> updateTimeSlot(@PathVariable Long id, @RequestBody FreeLessonTimeSlot timeSlot) {
        try {
            timeSlot.setId(id);
            boolean success = timeSlotService.updateTimeSlot(timeSlot);
            if (success) {
                return R.success("时段更新成功");
            } else {
                return R.error("时段更新失败");
            }
        } catch (RuntimeException e) {
            return R.error(e.getMessage());
        }
    }
}
